#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdlib>
using namespace std;
long a[100010];
long b[100010], c[100010], d[100010];
int make_seed(int l, int r)
{
	return rand() % (r - l + 1) + l;
}
void my_qsort(int l, int r)
{
	if (l >= r)return;
	int num = make_seed(l, r);
	int inf1 = 0, inf2 = 0, inf3 = 0;
	for (int i = l; i <= r; i++) {
		if (a[i] < a[num]) {
			b[inf1++] = a[i];
		}
		else if (a[i] > a[num]) {
			d[inf3++] = a[i];
		}
		else {
			c[inf2++] = a[i];
		}
	}
	for (int i = 0; i < inf1; i++) {
		a[i + l] = b[i];
	}
	for (int i = 0; i < inf2; i++) {
		a[i + inf1 + l] = c[i];
	}
	for (int i = 0; i < inf3; i++) {
		a[i + inf1 + inf2 + l] = d[i];
	}
	my_qsort(l, l + inf1 - 1);
	my_qsort(l + inf1 + inf2, r);
}
int main()
{
	srand((unsigned int)time(NULL));
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		scanf("%ld", &a[i]);
	}
	my_qsort(0, n - 1);
	for (int i = 0; i < n; i++) {
		printf("%ld", a[i]);
		if (i != n - 1)printf(" ");
	}
	cout << endl;
	return 0;
}





//int a[10] = { 9,8,7,6,5,4,3,2,1 };
//int b[100], c[100], d[100];
//int make_seed(int l,int r)
//{
//	return rand() % (r - l + 1) + l;
//}
//void my_qsort(int l, int r)
//{
//	if (l >= r)return;
//	int num = make_seed(l, r);
//	int inf1 = 0, inf2 = 0, inf3 = 0;
//	for (int i = l; i <= r; i++) {
//		if (a[i] < a[num]) {
//			b[inf1++] = a[i];
//		}
//		else if (a[i] > a[num]) {
//			d[inf3++] = a[i];
//		}
//		else {
//			c[inf2++] = a[i];
//		}
//	}
//	for (int i = 0; i < inf1; i++) {
//		a[i + l] = b[i];
//	}
//	for (int i = 0; i < inf2; i++) {
//		a[i + inf1 + l] = c[i];
//	}
//	for (int i = 0; i < inf3; i++) {
//		a[i + inf1 + inf2 + l] = d[i];
//	}
//	my_qsort(l, l + inf1 - 1);
//	my_qsort(l + inf1 + inf2, r);
//}
//int main()
//{
//	srand((unsigned int)time(NULL));
//	my_qsort(0, 9);
//	for (int i = 0; i < 10; i++)cout << a[i] << endl;
//	return 0;
//}


//long arr[100010];
//int n; int i;
//int compare(const void* e1, const void* e2)
//{
//	if (*(int*)e1 > *(int*)e2) {
//		return 1;
//	}
//	else if (*(int*)e1 < *(int*)e2) {
//		return -1;
//	}
//	else return 0;
//}
//int main()
//{
//	cin >> n;
//	for (i = 0; i < n; i++) {
//		scanf("%ld", &arr[i]);
//	}
//	/*sort(arr, arr + 10);
//	for (int i = 0; i < 10; i++) {
//		cout << arr[i] << endl;
//	}*/
//	qsort(arr, n, sizeof(long), compare);
//	for (int j = 0; j < n; j++) {
//		printf("%ld", arr[j]);
//		if (j != n - 1)printf(" ");
//	}
//	cout << endl;
//	return 0;
//}
